#include <stdio.h>

// 8
// top == 0; 不能往外弹，已到栈底
// top == 8; 不能往内压，已到栈顶

// top 始终指向一个待插入的位置，
// push 操作（压入）， 1， 写入数据， 2 。 top++； 3. 此两步操作的前提是栈非满
// pop 操作（弹出）   1. top--; 2. 弹出数据 3. 此两步操作的前提是栈非空


// 类型大总结
// 类型是对内存的格式化访问

typedef struct _Stack{
    char mem[1024];
    int top;
}Stack;

int isFull(Stack *ps)
{
    return ps->top == 1024;
}

int isEmpty(Stack *ps)
{
    return ps->top == 0;
}14unic

void push(Stack *ps,char ch)
{
    ps -> mem[(ps->top)++] = ch;
//    ps -> mem[ps->top] = ch;
//    ps ->top++;
}

char pop(Stack *ps)
{
    return ps -> mem[--(ps->top)];
}
int main()
{
    Stack s = {{0},0};

    for(char ch ='a'; ch <='z';ch++)
    {
        if(!isFull(&s))
            push(&s,ch);
    }
    while (!isEmpty(&s)) {
        putchar(pop(&s));
        puts("");
    }
//    printf("Hello World!\n");
    return 0;
}
